<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
        Promise构造函数原型对象的方法，这些方法都是给promise实例对象用的：
         -then
         -catch
         -finally
        
        */

        const pm = new Promise((resolve,reject) => {
            throw new Error("网络出现问题了")
            try {
                // throw new Error("网络出现问题了")
                console.log("开始请求");
                setTimeout(() => {
                    console.log("成功");
                    // resolve({
                    //     token: "hsgsjdk"
                    // })
                    reject("出错啦")
                },1500)
            } catch (e) {
                reject(e.message)
            }
        })

        console.log("pm", pm);

        /*
         then方法:
           -then方法是同步绑定的,但是then中的回调函数是异步的
           -promise实例状态的改变会触发then中的异步回调函数
           -then方法接收两个回调函数,分别处理成功promise实例和失败promise实例的逻辑
           -then接收的两个回调函数分别接收一个参数,参数分别是成功promise的值和失败promise的值
        
        then的返回值:
            -当调用then的promise实例是pending状态的时候then返回的也是pending状态的实例
            -then默认返回成功状态的promise实例,值是回调函数的返回值
            -当then中的回调函数返回promise实例的时候,则then方法的返回值和这个promise实例保持一致
            -当then中有报错但没有被处理的时候则then直接返回失败的promise实例,值为错误信息
            -当then中没有处理调用then的promise实例的函数时,直接穿透
            
           */

        //then一般用来检测promise实例的成功状态
        //then的调用是同步，then里面的回调函数是异步的

        const pm1 = pm.then()


        // const pm1 = pm.then((value) => {

        //     console.log("成功", value);
        //     // return "a"//promiseResult:a
        //     return new Promise((resolve, reject) => {
        //         try {
        //             throw new Error("网络出错")
        //             resolve({
        //                 username: "rain"//promiseResult:{username: "rain"}
        //             })
        //         } catch (e) {
        //             console.log("bbb");
        //             reject(e.message)
        //         }

        //     })
        // }, (reason) => {
        //     try {
        //         console.log("失败", reason);
        //         // return "b"
        //         return new Promise((resolve, reject) => {
        //             reject("sun")
        //         })
        //     }catch(e){
        //         console.log("aaa");
        //         reject(e.message)
        //     }
           
        // })

        console.log("pm1", pm1);

    </script>
</body>

</html>